package com.wql.collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 集合工具类
 * 
 * @author wuqinglong
 * @time 2013年11月5日 下午5:25:19
 * @email hellowql@126.com
 * 
 */
public class ListConvertUtils {

	// 私有化构造函数
	private ListConvertUtils() {
	}

	/**
	 * 集合分组<br />
	 * example:ls=[1,2,3,4,5,6,7]-->group(ls,2)-->[[1,2],[3,4],[5,6],[7]]
	 * 
	 * @param ite
	 * @param groupNum
	 * @return
	 */
	public static <T> List<List<T>> group(Iterable<T> ite, int groupNum) {
		List<List<T>> list = new ArrayList<List<T>>();
		if (null == ite || groupNum < 1) {
			return list;
		}
		Iterator<T> ito = ite.iterator();
		int index = 0, group = 0;
		while (ito.hasNext()) {
			group = index++ / groupNum;
			if (list.size() - 1 < group || list.size() == 0) {
				list.add(new ArrayList<T>());
			}
			list.get(group).add(ito.next());
		}
		return list;
	}

	/**
	 * 集合扁平化<br />
	 * example:ls=[[1,2],[3,4]]-->flat(ls,Integer.class)-->[1,2,3,4]
	 * 
	 * @param ite
	 * @param cls
	 * @return
	 */
	public static List<Object> flat(Iterable<?> ite, Class<?> cls) {
		List<Object> list = new ArrayList<Object>();
		if (null == ite) {
			return list;
		}
		Iterator<?> ito = ite.iterator();
		while (ito.hasNext()) {
			Object obj = ito.next();
			if (obj.getClass().getName().equals(cls.getName())) {
				list.add(obj);
			} else {
				list.addAll(flat((Iterable<?>) obj, cls));
			}
		}
		return list;
	}

}
